package practica1.actions;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import practica1.Practica1;
import practica1.controller.Controller;
import practica1.language.Language;
import practica1.language.LanguageEvent;
import practica1.language.LanguageListener;
import practica1.logic.LogicExperimento;
import practica1.manejoExperimento.ExperimentoInvalidoException;
import practica1.manejoExperimento.ExportarExperimentoExcel;

/**
 * Clase que implementa la acción para exportar a access un experimento
 * @author Miguel González - Ceura
 */
public class ActionExportarExcel extends AbstractAction implements LanguageListener {
    
    /**
     * Constructor de la clase
     */
    public ActionExportarExcel() {
        super(Language.getI().getP("EXPORTAR_EXCEL"), null);

        Language.getI().addLanguageListener(this);
        
        putValue(SHORT_DESCRIPTION, Language.getI().getP("EXPORTAR_EXCEL"));
        putValue(NAME, Language.getI().getP("EXPORTAR_EXCEL"));
        putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_E));
        putValue(SELECTED_KEY, Boolean.TRUE);
    }
    
    /**
     * Cuando sucede la acción nos encargamos de exportar a access el
     * experimento princpal
     * @param e ActionEvent Evento producido
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        LogicExperimento exp = Controller.getInstance().getExperimentoPrincipal();
        
        if(exp != null) {
            try {
                ExportarExperimentoExcel.ExportarExcel (exp);
            } catch (ExperimentoInvalidoException ex) {
                Practica1.log.error(Language.getI().getP("ERROR"), ex);
                JOptionPane.showMessageDialog(Practica1.getInstance(),
                            Language.getI().getP("PROBLEMA_EXPORTAR"), 
                            Language.getI().getP("ERROR"), JOptionPane.ERROR_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(Practica1.getInstance(),
                        Language.getI().getP("SELECCIONA_EXPERIMENTO_COMO"
                    + "_PRINCIPAL"), Language.getI().getP("CERRAR"),
                                JOptionPane.WARNING_MESSAGE);
        }
    }

    /**
     * Al cambiar el idioma actualizamos el nombre y la descripción
     * @param evt LanguageEvent
     */
    @Override
    public void idiomaChange(LanguageEvent evt) {
        putValue(SHORT_DESCRIPTION, Language.getI().getP("EXPORTAR_EXCEL"));
        putValue(NAME, Language.getI().getP("EXPORTAR_EXCEL"));
    }
}
